package com.zpyr.mvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import org.mybatis.spring.SqlSessionTemplate;

import com.zpyr.common.CookieManager;
import com.zpyr.common.DateUtil;
import com.zpyr.common.SessionManager;
import com.zpyr.common.StringUtil;
import com.zpyr.mvc.interfaces.HomeMapper;

@Controller
public class HomeCont {
	
	@Autowired
	private SqlSessionTemplate sqlSession;
	private final String url ="/home/common/"; 

	@RequestMapping(value="/home/index.zpr" , params={"!nouse"} )
	public ModelAndView goIndex(HttpServletRequest request , HttpServletResponse response) {// RequestParam <- 파라미터가 없으면 400에러를 발생함. 지나친 400에러 발생은 문제의 소지가 있기에 지켜보기로 함.
		ModelAndView mav = new ModelAndView("myhome/index");
		return mav;
	}
	
	@RequestMapping(value=url + "login.zpr" , params={"!nouse"} )
	public ModelAndView doLogin(HttpServletRequest request , HttpServletResponse response , String login_email , String login_password , String login_maintain ) {// RequestParam <- 파라미터가 없으면 400에러를 발생함. 지나친 400에러 발생은 문제의 소지가 있기에 지켜보기로 함.
		SessionManager sess = SessionManager.getInstance(request);
		
		String auth_email = "ocpek@nate.com";
		String auth_pw = "1010";
		// 원래는 db 에서 가져와야 하지만.. 일단 나만쓸거라 db가 필요없음.
		
		String ret = "Y";
		
		if(auth_email.equals( login_email )) {
			if(auth_pw.equals( login_password )) {
				// id 비밀번호가 맞으면 로그인 성공.
				sess.setLoginEmail(login_email);
			}
			else {
				ret = "2";
			}
		}
		else {
			ret = "1";
		}
		
		if( "on".equals(login_maintain) && "Y".equals(ret) ) {
			// 인증 통과 후 로그인 유지에 클릭을 했다면, 쿠키에 값을 넣어 로그인을 유지한다.
			CookieManager cke = new CookieManager(request , response);
			cke.setLoginId( StringUtil.encodeMD5( login_email ) ); 
			cke.setLoginIp( StringUtil.encodeMD5( request.getRemoteHost() ) ); 
			// md5로 암호화 - 복호화가 불가능한 방식. 그러나 항상 동일하게 암호화 된다.
			// 이메일+request.getRemoteHost 를 암호화 하여, ip를 체크함으로써 다른 피씨에서 동일 쿠키로 인증 못하도록 설정.
			// 이것을 하지 않으면 쿠키값만 복사해서 비밀번호를 몰라도 로그인 하는 것이 가능하게 됨.
		}
		
		ModelAndView mav = new ModelAndView("common/result");
		mav.addObject("result", ret);
		return mav;
	}

	@RequestMapping(value=url + "logout.zpr" , params={"!nouse"} )
	public ModelAndView doLogout(HttpServletRequest request , HttpServletResponse response) {// RequestParam <- 파라미터가 없으면 400에러를 발생함. 지나친 400에러 발생은 문제의 소지가 있기에 지켜보기로 함.
		SessionManager sess = SessionManager.getInstance(request);
		sess.logout();
		
		CookieManager cke = new CookieManager(request, response);
		cke.removeLoginId();
		cke.removeLoginIp();
		
		ModelAndView mav = new ModelAndView("common/result");
		mav.addObject("result", "Y");
		return mav;
	}

	@RequestMapping(value=url + "loginForm.zpr" , params={"!nouse"} )
	public ModelAndView getLoginForm(HttpServletRequest request , HttpServletResponse response) {// RequestParam <- 파라미터가 없으면 400에러를 발생함. 지나친 400에러 발생은 문제의 소지가 있기에 지켜보기로 함.
		ModelAndView mav = new ModelAndView("myhome/common/loginForm");
		return mav;
	}
	
	
		
}